package com.cskaoyan.javase.homework.senior._06reflect;

import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * @description:
 * @author: songtao@cskaoyan.onaliyun.com
 **/

/*
完成如下方法，要求该方法能调用，指定配置文件中，指定类中指定的普通成员方法(无参方法)
    假设指定类中一定有默认构造方法

     public class Work2 {

    /**
    *
    * @param configFilePath  表示配置文件的路径
    */
/*
public void callTargetMethod(String configFilePath) {


        }
   }
 */
public class Work2 {

    public void callTargetMethod(String configFilePath) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        // 加载配置文件
        Properties properties = loadConfigFile(configFilePath);
        // 读取配置信息
        String className = properties.getProperty("className");
        String methodName = properties.getProperty("methodName");

        // 获取字节码文件对象
        Class targetClass = Class.forName(className);
        // 获取method对象
        Method declaredMethod = targetClass.getDeclaredMethod(methodName);

        // 实例化对象
        Object targetObje = targetClass.newInstance();
        // 调用方法
        declaredMethod.invoke(targetObje);
    }

    private Properties loadConfigFile(String configFilePath) throws IOException {
        Properties properties = new Properties();
        properties.load(new FileInputStream(configFilePath));
        return properties;
    }
}

